﻿#region Using

using SAPbouiCOM;
using SapFramework.Interface.Controls.Items.Base;
using SapFramework.Interface.Events;

using Form = SapFramework.Interface.Controls.Forms.Base.Form;
using Item = SapFramework.Interface.Controls.Items.Base.Item;

#endregion

namespace SapFramework.Interface.Controls.Items.Specific
{
    /// <summary>
    /// Realiza o encapsulamento de um objeto do tipo <see cref="SAPbouiCOM.LinkedButton"/> da UI API do SAP Business One
    /// </summary>
    public sealed class LinkedButton : Item, SAPbouiCOM.LinkedButton
    {
        #region Eventos

        /// <summary>
        /// Evento disparado quando o botão do mouse foi liberado em cima de um item, ou seja, quando o botão do mouse está em cima, mas nenhuma ação foi tomada ainda.
        /// </summary>
        [Event( BoEventTypes.et_ITEM_PRESSED )]
        public event EventBoolItem OnBeforeItemPressed;

        /// <summary>
        /// Evento disparado quando o botão do mouse foi liberado em cima de um item, ou seja, quando o botão do mouse está em cima, e qualquer ação do SBO já foi realizada.
        /// </summary>
        [Event( BoEventTypes.et_ITEM_PRESSED )]
        public event EventVoidItem OnAfterItemPressed;

        #endregion

        /// <summary>
        /// Guarda uma referencia para a parte específica do item
        /// </summary>
        private readonly SAPbouiCOM.LinkedButton mLinkedButton;

        /// <summary>
        /// Construtor
        /// </summary>
        /// <param name="aForm">O formulário ao qual o item pertence</param>
        /// <param name="aItemUniqueId">Id único do Item do Form do SAP Business One</param>
        public LinkedButton( Form aForm, string aItemUniqueId ) : base( aForm, aItemUniqueId, BoFormItemTypes.it_LINKED_BUTTON )
        {
            mLinkedButton = mItem.Specific as SAPbouiCOM.LinkedButton;
        }

        #region Implementation of ILinkedButton

        /// <summary>
        /// O objeto de destino para o link da setinha.
        /// </summary>
        /// <remarks>
        /// Utilize este cara para procurar o objeto da SAP que você deseja procurar, porém caso não exista uma
        /// constante para o objeto que você procura em <see cref="BoLinkedObject"/>, utilize a propriedade <see cref="LinkedObjectType"/>
        /// para localizar o objeto, informando a constante do objeto nele.
        /// </remarks>
        /// <see cref="LinkedObjectType"/>
        public BoLinkedObject LinkedObject
        {
            get { return mLinkedButton.LinkedObject; }
            set { mLinkedButton.LinkedObject = value; }
        }

        /// <summary>
        /// O objeto de destino para o link da setinha.
        /// 
        /// Utilize esta propriedade para ligar a objetos que não suportados pela propriedade <see cref="LinkedObject"/> 
        /// ( ou seja, que não existem em <see cref="BoLinkedObject"/> 
        /// </summary>
        /// <see cref="LinkedObject"/>
        public string LinkedObjectType
        {
            get { return mLinkedButton.LinkedObjectType; }
            set { mLinkedButton.LinkedObjectType = value; }
        }

        #endregion
    }
}